####偏导数，一个函数中有多个参数时，求导，我们就需要确定我们要求哪个参数的导数，不能同时求所有参数的导数，数学或者什么别的学科，都是需要遵循这种确定的规律的，变1
#先定义一个多个参数的函数
def function_1(x):
    return x[0]**2 + x[1]**2  #将两个参数分别进行平方，然后求和


#数值微分
def numerical_diff(f,x):
    h = 1e-4 #定义一个极小值
    return (f(x+h) - f(x-h))/(2*h) #中心差分，准确率更高一些

##现在有这样的一个值，我们来对它们进行求导，x0 = 3；x1 = 4
#好，如果我们要先求x0这个参数的的导数，我么就要这样做
#定义一个新的函数
def function_tmp1(x0):
    return x0**2 + 4**2
#而当我们要对x1求导时，我们定义这样一个新的函数
def function_tmp2(x1):
    return 3**2 + x1**2

if __name__ == '__main__':
    x0d = numerical_diff(function_tmp1,3) #6.00000000000378（解析性求导：6）
    x1d = numerical_diff(function_tmp2,4) #7.999999999999119（解析性求导：8）
    print(x0d)
    print(x1d)



